Maîtriser le cycle de vie d'un objet C++ revient à maîtriser les mécanismes fondamentaux de son existence au sein du tas et pile. Le contrôle de copie définit la manière dont une classe gère sa durée de vie à travers deux opérations : le constructeur de copie et le opérateur d'affectation par copie.
1. Initialisation vs. Affectation
Initialisation directe (par exemple, string dots(10, '.')) appelle un constructeur directement. Toutefois, initialisation par copie (string s2 = dots) dépend du constructeur de copie. Contrairement à l'initialisation, affectation (trans = accum) écrase un objet existant en utilisant l'opérateur =. Une contrainte essentielle : le paramètre du constructeur de copie doit être une référence (const Foo&); sinon, passer un argument par valeur déclencherait une boucle récursive infinie de rappels de copie.
2. Le Rôle de la Synthèse
Si vous ne définissez pas ces membres, le compilateur fournit des versions synthétisées qui effectuent des copies membre à membre. Attention : bien que suffisantes pour les types simples, elles échouent souvent pour les classes gérant la mémoire dynamique, entraînant des pointeurs pendus ou des double-libérations.